package vue.eleve;

import java.awt.BorderLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.text.SimpleDateFormat;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;

import metier.Eleve;
import metier.Fonction;
import metier.Grade;
import metier.Stage;
import vue.commun.JPanRechercherEleve;
import configuration.Constante;
import configuration.MessageAppli;
import ctr.commun.CommunGest;
import ctr.eleve.GestSupprimerEleve;

/**
 * @author olivier.rombaut
 * Permet de supprimer un élève.
 */
public class JPanSupprimerEleve extends RechercherEleve{
	
	private static final long serialVersionUID = -8258905260255616984L;
	private JTextField saisiNomEleve, saisiPrenomEleve;
	private JTextField saisiRechercheNomEleve, saisiRecherchePrenomEleve;
	private JComboBox saisiGradeEleve;
	private JComboBox saisiFonction;
	private JComboBox saisiStage, saisiRechercheStage;
	private JTextField saisiDateNaissanceEleve;
	private String titre;
	private int idEleve;

	
	/**
	 * Constructeur de copie.
	 * @param jPanSupprimerEleve
	 */
	public JPanSupprimerEleve(JPanSupprimerEleve jPanSupprimerEleve) {
		this.titre = jPanSupprimerEleve.getTitre();
		this.eleve = jPanSupprimerEleve.getEleve();
		afficher();
	}
	
	/**
	 * Constructeur
	 * @param titre
	 */
	public JPanSupprimerEleve(String titre) {
		this.titre = titre;
		afficher();
	}
	
	
	/**
	 * Constructeur de base.
	 * @param titre
	 */
	public void afficher() {
		
		// Instanciation pour recuperer les objets en bases.
		// Oblige a passer par la couche controle pour acceder aux metiers.
		CommunGest communGest = new CommunGest();
		
		// Recuperation de la liste des stages.
		ArrayList<Stage> lStage = communGest.getListeStage();
		if ( lStage != null && !lStage.isEmpty()){
			// Creation du pannel de saisie pour la recherche
			JPanRechercherEleve jPanRechercherEleve = new JPanRechercherEleve(this);
			
			// Ajout du panel de recherche dans le panel Modifier eleve
			this.setLayout(new BorderLayout(2,1));
			this.add(jPanRechercherEleve, BorderLayout.NORTH);
			this.setBorder(new TitledBorder(titre));
			if ( eleve != null ){
				this.add(partieSupprimer(lStage), BorderLayout.CENTER);
			}
			
		}else{
			JOptionPane.showMessageDialog(this, MessageAppli.MSG_STAGE_AUCUN_STAGE + " Suppression d'eleve impossible.", MessageAppli.MSG_ERREUR_TITRE, JOptionPane.WARNING_MESSAGE);
		}
	}
	
	private JPanel partieSupprimer(ArrayList<Stage> lStage){
		CommunGest communGest = new CommunGest();
		ArrayList<Fonction> lFonctions = communGest.getListeFonction();
		ArrayList<Grade> lGrade = communGest.getListeGrade();
		Grade grade = null;
		String titre = "";
		Eleve eleve = getEleve();
		
		// Creation du panel de modification
		JPanel modif = new JPanel();
		
		// Panel de saisi du panel de modif
		JPanel panelSaisi = new JPanel();
		panelSaisi.setLayout(new GridLayout(6,1,5,5));
		
		
		// Permet de renseigner les champs par les valeurs precedement saisies si existante.
		saisiNomEleve = new JTextField(15);	
		saisiNomEleve.setEditable(false);
		saisiPrenomEleve = new JTextField(15);
		saisiPrenomEleve.setEditable(false);
		saisiGradeEleve = new JComboBox(lGrade.toArray());
		saisiGradeEleve.setEnabled(false);
		saisiDateNaissanceEleve = new JTextField(10);
		saisiDateNaissanceEleve.setEditable(false);
		saisiStage = new JComboBox(lStage.toArray());
		saisiStage.setEnabled(false);
		saisiFonction = new JComboBox(lFonctions.toArray());
		saisiFonction.setEnabled(false);
		
		if ( eleve != null ){
			grade = communGest.getGrade(eleve.getIdGrade());
			Stage stage = communGest.getStage(eleve.getIdStage());
			Fonction fonction = communGest.getFonction(eleve.getIdFonction());
			// On recupere l'objet dans la comboBox, qui correspond a celui de l'eleve.
			//Pour pouvoir le selectionné automatiquement. 
			for (Grade grade2 : lGrade) {
				if ( grade2.getIdGrade() == grade.getIdGrade() ){
					grade = grade2;
				}
			}
			
			for (Stage stage2 : lStage) {
				if ( stage2.getIdStage() == stage.getIdStage() ){
					stage = stage2;
				}
			}
			
			for (Fonction fonction2 : lFonctions) {
				if ( fonction2.getIdFonction() == fonction.getIdFonction() ){
					fonction = fonction2;
				}
			}
			SimpleDateFormat formatDateJour = new SimpleDateFormat(Constante.FORMAT_DATE_SHORT.toString());
			
			saisiNomEleve.setText(eleve.getNomEleve());
			saisiPrenomEleve.setText(eleve.getPrenom());
			saisiGradeEleve.setSelectedItem(grade);
			saisiDateNaissanceEleve.setText(formatDateJour.format(eleve.getDateNaissance()));
			saisiStage.setSelectedItem(stage);
			saisiFonction.setSelectedItem(fonction);
		}
		
		// Ajout des composants au panel de modif
		panelSaisi.add(saisiNomEleve);
		panelSaisi.add(saisiPrenomEleve);
		panelSaisi.add(saisiGradeEleve);
		panelSaisi.add(saisiDateNaissanceEleve);
		panelSaisi.add(saisiStage);
		panelSaisi.add(saisiFonction);
		
		// Panel du label modifier
		JPanel panelLabel = new JPanel();
		panelLabel.setLayout(new GridLayout(6,1,5,5));
		panelLabel.add(new JLabel("Nom : "));
		panelLabel.add(new JLabel("Prenom : "));
		panelLabel.add(new JLabel("Grade : "));
		panelLabel.add(new JLabel("Date de Naissance : "));
		panelLabel.add(new JLabel("Stage : "));
		panelLabel.add(new JLabel("Fonction : "));
		
		// Creation du panel bouton modifier
		JPanel panelBouton = new JPanel();
		JButton jButtonAjoutEleve = new JButton("Supprimer");
		jButtonAjoutEleve.setName(Constante.BOUTON_ELEVE_SUPPRIMER);
		jButtonAjoutEleve.addActionListener(new GestSupprimerEleve(this));
		
		// Ajout de ses composants
		panelBouton.add(jButtonAjoutEleve);
		
		if ( eleve != null ){
			grade = communGest.getGrade(eleve.getIdGrade());
			
			titre = MessageAppli.MSG_ELEVE_SELECTIONNE + " " + 
					grade.getAbrev() + " " + eleve.getNomEleve() + " " + eleve.getPrenom();
		}
		
		// Panel global
		modif.setBorder(new TitledBorder(titre));
		modif.setLayout(new GridBagLayout());
		
		// Agencements de composants
		GridBagConstraints gbc_modi = new GridBagConstraints();
		gbc_modi.weightx = 0;
		gbc_modi.weighty = 0; 
		gbc_modi.gridwidth = 1;
		gbc_modi.gridheight = 1;
		
		gbc_modi.gridx = -1;
		gbc_modi.gridy = 0;
		gbc_modi.fill = GridBagConstraints.VERTICAL;
		modif.add(panelLabel,gbc_modi);
		
		gbc_modi.gridx = 1;
		gbc_modi.gridy = 0;
		gbc_modi.fill = GridBagConstraints.VERTICAL;
		modif.add(panelSaisi,gbc_modi);
		
		gbc_modi.gridx = 0;
		gbc_modi.gridy = 2;
		gbc_modi.gridwidth = 2;
		gbc_modi.gridheight = 2;
		gbc_modi.fill = GridBagConstraints.CENTER ;
		modif.add(panelBouton, gbc_modi);
		
		return modif;
	}
	public JTextField getSaisiNomEleve() {
		return saisiNomEleve;
	}

	public JTextField getSaisiPrenomEleve() {
		return saisiPrenomEleve;
	}

	public JComboBox getSaisiGradeEleve() {
		return saisiGradeEleve;
	}

	public JTextField getSaisiDateNaissanceEleve() {
		return saisiDateNaissanceEleve;
	}

	public JComboBox getSaisiStage() {
		return saisiStage;
	}

	public JTextField getSaisiRechercheNomEleve() {
		return saisiRechercheNomEleve;
	}

	public JTextField getSaisiRecherchePrenomEleve() {
		return saisiRecherchePrenomEleve;
	}

	public JComboBox getSaisiRechercheStage() {
		return saisiRechercheStage;
	}

	public String getTitre() {
		return titre;
	}

	public int getIdEleve() {
		return idEleve;
	}

	public void setIdEleve(int idEleve) {
		this.idEleve = idEleve;
	}

	@Override
	public Eleve getEleve() {
		return this.eleve;
	}

	@Override
	public void setEleve(Eleve eleve) {
		this.eleve = eleve;
		
	}
	
	@Override
	public JPanel init(){
		return new JPanSupprimerEleve(this);
	}

	/**
	 * @return the saisiFonction
	 */
	public JComboBox getSaisiFonction() {
		return saisiFonction;
	}

}
